package example.字符串;


import java.util.HashSet;

// NC31 第一个只出现一次的字符

/**
 * 在一个字符串(0<=字符串长度<=10000，全部由字母组成)中找到第一个只出现一次的字符,
 * 并返回它的位置, 如果没有则返回 -1（需要区分大小写）.（从0开始计数）
 * 输入--"google"
 * 输出--4
 */
public class Demo3 {

    public static int FirstNotRepeatingChar(String str) {
        //ints这个数值元素为-1，就代表有重复,i->len-1检索第一个为0就说明，就是答案
        int[] ints = new int[str.length()];
        //len-1-->0
        HashSet<Character> hashSetR = new HashSet<>();
        //0-->len-1
        HashSet<Character> hashSetL = new HashSet<>();
        for (int i = 0; i < str.length(); i++) {
            //说明有了
            if (hashSetL.contains(str.charAt(i))) {
                ints[i] = -1;
            } else {
                hashSetL.add(str.charAt(i));
            }
        }

        for (int i = str.length() - 1; i >= 0; i--) {
            //说明有了
            if (hashSetR.contains(str.charAt(i))) {
                ints[i] = -1;
            } else {
                hashSetR.add(str.charAt(i));
            }
        }
        for (int i = 0; i < ints.length; i++) {
            if (ints[i] == 0) {
                return i;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        int google = FirstNotRepeatingChar("google");
        System.out.println(google);
    }
}
